package mysql8学习.高级.第10章_索引优化与查询优化;

/**
 * 无过滤，不索引
 * # 会发现  这个联合索引只用到了 age，因为在where条件过滤完后，如果就剩了几万条或更少，
 * # 对电脑来说很少，就自己排序了
 * EXPLAIN SELECT * FROM student WHERE age=45 ORDER BY classid;
 * EXPLAIN SELECT * FROM student WHERE age=45 ORDER BY classid, NAME;  #同上
 * EXPLAIN SELECT * FROM student WHERE classid=45 ORDER BY age; #没用到组合索引 因为最左前缀原则
 *
 * #用到了索引  因为只取前十条，他会直接从联合索引中查找 classid=45 的 只取前10个 这个效率高
 * EXPLAIN SELECT * FROM student WHERE classid=45 ORDER BY age LIMIT 10;
 *
 *
 * 所有的排序都是在条件过滤之后才执行的。所以,如果条件过滤掉大部分数据的话，
 * 剩下几百几千条数据进行排其实并不是很消耗性能，即使索引优化了排序，但实际提升性能很有限。
 * 相对的 stuno<101000这个条件,如果没有用到索引的话，要对几万条的数据进行扫描,这是非常消耗性能的,
 * 所以索引放在这个字段上性价比最高，是最优选择。
 *
 * 1.两个索引同时存在，mysql自动选择最优的方案。
 *    但是，随着数据量的变化，选择的索引也会随之变化的。
 * 2. 当[范围条件]和[group by或者order by]的字段出现二选一时，优先观察条件字段的过滤数量，
 *   [如果过滤的数据足够多]，而需要排序的数据并不多时，优先把索引放在范围字段上。反之，亦然。
 *
 *
 */
public class E3_排序优化之重点 {
}
